﻿using System.Data;

namespace Database
{
    /// <summary>
    /// Đối tượng làm việc với cơ sở dữ liệu
    /// </summary>
    public abstract class ConnectionDB
    {
        /// <summary>
        /// Kiểm tra kết nối.
        /// </summary>
        /// <returns></returns>
        public abstract bool Check();

        /// <summary>
        /// Thực thi câu lệnh truy vấn
        /// </summary>
        /// <param name="select">Chuỗi truy vấn.</param>
        /// <returns></returns>
        public abstract DataTable Query(string select);

        /// <summary>
        /// Thực thi câu lệnh truy vấn
        /// </summary>
        /// <param name="select">Chuỗi truy vấn.</param>
        /// <param name="obj">Các tham só.</param>
        /// <returns></returns>
        public abstract DataTable Query(string select, params object[] obj);

        /// <summary>
        /// Thực thi câu lệnh truy vấn
        /// </summary>
        /// <param name="select">Chuỗi truy vấn.</param>
        /// <returns></returns>
        public abstract object[][] Querys(string select);

        /// <summary>
        /// Thực thi câu lệnh truy vấn
        /// </summary>
        /// <param name="select">Chuỗi truy vấn.</param>
        /// <param name="obj">Các tham só.</param>
        /// <returns></returns>
        public abstract object[][] Querys(string select, params object[] obj);

        /// <summary>
        /// Thực thi truy vấn bằng StoredProcedure
        /// </summary>
        /// <param name="ProcName">Tên của Procedure.</param>
        /// <returns></returns>
        public abstract DataTable QueryProcedure(string ProcName);

        /// <summary>
        /// Thực thi truy vấn bằng StoredProcedure
        /// </summary>
        /// <param name="ProcName">Tên của Procedure.</param>
        /// <param name="obj">Danh sách các tham số.</param>
        /// <returns></returns>
        public abstract DataTable QueryProcedure(string ProcName, params object[] obj);

        /// <summary>
        /// Thực thi lệnh sql
        /// </summary>
        /// <param name="execute">Chuỗi thực thi.</param>
        /// <returns>Số trường được thực thi</returns>
        public abstract int Execute(string execute);

        /// <summary>
        /// Thực thi lệnh sql
        /// </summary>
        /// <param name="execute">
        /// Chuỗi thực thi với tham số là số nguyên dương nằm trong dấu {}.
        /// VD: Delete Table where id like {0};
        /// </param>
        /// <param name="obj">Các tham số.</param>
        /// <returns></returns>
        public abstract int Execute(string execute, params object[] obj);

        /// <summary>
        /// Thực thi StoredProcedure
        /// </summary>
        /// <param name="ProcName">Tên của Procedure.</param>
        /// <param name="obj">Danh sách các tham só.</param>
        /// <returns></returns>
        public abstract int ExecuteProcedure(string ProcName, params object[] obj);
    }
}
